package com.wyz.easyexcel.util;

import com.wyz.easyexcel.Application;
import com.wyz.easyexcel.configuration.MessageSourceConfiguration;
import org.springframework.context.MessageSource;
import org.springframework.context.NoSuchMessageException;

import java.util.Locale;
import java.util.Optional;

/**
 * @author wyz
 * @description: 获取 i18n 消息
 * @date 2021/12/30 17:04
 */
public class MessageStoreUtils {

    private MessageStoreUtils(){};

    /**
     *  从容器上下文中获取 MessageSourceConfiguration 实例对象
     */
    private static MessageSourceConfiguration messageSourceConfiguration = Application.getBean(MessageSourceConfiguration.class);

    /**
     *  从容器上下文中获取 MessageSource 实例对象
     */
    private static MessageSource messageSource = Application.getBean(MessageSource.class);

    /**
     *  根据国际化key 获取值
     * @param locale
     * @param key
     * @param defaultValue 当国际化配置文件中没有对应的结果时，返回默认值
     * @return
     */
    public static String getMessage(Locale locale,String key,String defaultValue){
        if (null == locale){
            //如果locale 为null 则获取request 头中自定义的国际化语言，如果请求头中没有则获取默认的locale
            locale = Optional.ofNullable(RequestUtil.getLanguage()).orElse(messageSourceConfiguration.getDefaultLocale());
        }
        String message;
        try {
            message= messageSource.getMessage(key, null, locale);
        }catch (NoSuchMessageException ignore){
            message = defaultValue;
        }
        return message;
    }

    /**
     * 根据国际化key 获取值
     * @param key
     * @param defaultValue 当国际化配置文件中没有对应的结果时，返回默认值
     * @return
     */
    public static String getMessage(String key,String defaultValue){
        return getMessage(null, key, defaultValue);
    }

    /**
     * 根据国际化key 获取值
     * @param key
     * @return
     */
    public static String getMessage(String key){
        return getMessage(null, key, "[" + key + "]");
    }
}
